Decorator - {nestjs}
README
week14-18 {swjungle}{my own weapon}{nestjs, socketio}์์ ์งํํ๊ณ ์๋ NestJS ํ๋ก์ ํธ ์งํ๋์ค ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ ๋ถ๋ถ์ด ๋ง์ด ๋ณด์ฌ ์ง์ ๋ง๋ค์ด ๋ณด๋ฉด์ ๊ณต๋ถํ๋ ค๊ณ ํ๋ค.
DIY :: Query
client.handshake.query[param?: string]
โถ @WSQuery(param?: string)
: ์ด์ฐจํผ ๋๊ฐ์ด HTTP/S๋ก ๋์๊ฐ๋ ๊ฑฐ๋๊น ์จ๋ ๋์ง ์์๊น? ํ์ง๋ง ์ง์ ์ฐ์ด๋ณด๋ null์ด ๋์๋ค.
@SubscribeMessage('stop')
async stop(client: Socket, payload: { cur_time: Date }, @Query('uuId') uuid: string) {
Logger.debug('uuid: ' + uuid);
[Nest] 6106 - 12/01/2023, 11:40:52 AM DEBUG uuid: null
๊ทธ๋์ ๋ณ๋์ @Wsquery('uuId')
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ๋ง๋ค์๊ณ ์์์ ์ฒ๋ผ ์ฌ์ฉํ์๊ณ , ์ด๋ฒ์ uuId๊ฐ ์ ์ฐํ์ ธ ๋์๋ค. ํ์ง๋ง payload๋ฅผ ๋ถํดํ ์ ์๋ค๋ ์๋ฌ๋ฅผ ๋ง์ดํ๊ณ ๋ง์๋ค. ํ์ด๋ก๋๋ ์ธ์์ ์์์ ์ํฅ์ ๋ฐ๋์ง๋ผ ๋ง์ฝ ์ด๋ ๊ฒ ์ฐ๊ณ ์ถ๋ค๋ฉด payload๋ฅผ ์ํ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ํ๋ ๋ ๋ง๋ค์ด์ผ ํ ๊ฒ์ด๋ค. ์ผ๋จ ๋๋ ๋น ๋ฅด๊ฒ ๊ฐ๋๋ฅผ ๋ง๋ค์ด๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ถ๋ถ์ ๋๊ธฐ๋๋ก ํ๊ฒ ๋ค.
DIY :: Guard
์ด๋ฒ์ ๋ง๋ค์ด๋ณผ ๊ฒ์ game์ status๋ฅผ ๊ฒ์ฌํ๋ ๋ก์ง์ ๊ฐ๋์ ๋ด์๋ณผ ๊ฒ์ด๋ค. user uuid ํน์ host uuid์ ๋ฐ๋ผ game ์ธ์คํด์ค๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ์์ด ๋ค๋ฅด๊ณ , ๊ฐ๋๋ฅผ ๊ฑธ ์ํ๊ฐ ์ด ์ธ๊ฐ์ง (wait
, playing
, end
)๋ ์๊ธฐ ๋๋ฌธ์ ์๋ง๋ Reflection์ ์ฌ์ฉํ์ฌ์ผ ํ ๊ฒ ๊ฐ์๋ณด์ธ๋ค.
https://docs.nestjs.com/fundamentals/execution-context#reflection-and-metadata
์๋ก์ด Reflector#createDecorator
๋ฅผ ์ฌ์ฉํ ์๋ ์๊ณ , ๊ฐ๋๋ฅผ ๊ฑธ๊ณ ์ถ์ ์ปจํ
์คํธ์@SetMetadata()
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ง์ ์ฌ์ฉํด๋ ๋๋ค.